<?php

namespace App\Http\Controllers\Api\v1\Recode;

use App\Http\Controllers\Api\BaseController;
use App\Http\Controllers\Api\v1\User\InfoController;
use App\Models\Api\Cat;
use App\Models\Api\Recode;
use App\Models\Api\RecodeCat;
use App\Models\Api\User;
use App\Tools\Astrolog\Astrolog;
use App\Tools\Base\Avatar;
use AstroTool\Cache\CacheManage;
use Cache;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Input;
use DB;
/**
 * 星盘档案管理控制器
 * Class Index
 * @package
 */
class IndexController extends BaseController
{
    protected $noNeedJudgeSummer = ['香港特别行政区', '澳门特别行政区', '台湾省', '北美洲', '大洋洲', '非洲', '南美洲', '欧洲', '亚洲'];

    // public function __construct()
    // {
    //     parent::__construct();
    // }

    /**
     * 添加档案
     */
    public function add(Request $request)
    {
        $data = [
            'uid'            => (int) $request->uid,
            'name'           => $request->input('name', '', 'htmlspecialchars'), // 档案名称
            'type'           => $request->input('type', 2), // 档案类型  1男 | 2 女 | 3 男同 | 4 女同 | 5 事件 | 6 卜卦
            'year'           => $request->input('year'), // 出生时间-年
            'month'          => $request->input('month'), // 出生时间-月
            'day'            => $request->input('day'), // 出生时间-日
            'hour'           => $request->input('hour', 12), // 出生时间-时
            'minute'         => $request->input('minute', 0), // 出生时间-分
            'timezone'       => $request->input('timezone', 8), // 出生时间-时区
            'birth_country'  => $request->input('birth_country', '', 'htmlspecialchars'), // 出生地点-省
            'birth_province' => $request->input('birth_province', '', 'htmlspecialchars'), // 出生地点-市
            'birth_city'     => $request->input('birth_city', '', 'htmlspecialchars'), // 出生地点-区
            'live_country'   => $request->input('live_country', '', 'htmlspecialchars'), // 现居地-省
            'live_province'  => $request->input('live_province', '', 'htmlspecialchars'), // 现居地-市
            'live_city'      => $request->input('live_city', '', 'htmlspecialchars'), // 现居地-区
            'comments'       => $request->input('comments', '', 'htmlspecialchars'), // 档案标签如 自己 朋友 案例
            'isself'         => $request->input('isself', 0), // 档案是否为自己 0 否 | 1 是（自己的档案无法删除，无法更改为其他标签）
            'long_deg'       => $request->input('long_deg'), // 经度-度
            'long_min'       => $request->input('long_min'), // 经度-分
            'ew'             => $request->input('ew', 1), // 东经|西经 1|-1
            'lat_deg'        => $request->input('lat_deg'), // 纬度-度
            'lat_min'        => $request->input('lat_min'), // 纬度-分
            'ns'             => $request->input('ns', 1), // 南纬北纬  1|-1
            'avatar'         => $request->input('avatar', '', 'htmlspecialchars'), // 头像地址
            'is_summer'      => 0, // 夏令时
        ];
        $data['or_day'] = $data['day']; // 固定添加档案的时间，当产生订单时，用于检测是否在可变范围内
        // 只判断大陆地区的夏令时
        if (!in_array($data['birth_country'], $this->noNeedJudgeSummer)) {
            $data['is_summer'] = isSummerTime($data['hour'], $data['minute'], 0, $data['month'], $data['day'], $data['year']) ? 1 : 0; // 是否开启夏令时
        }
        $result =contentCensor($data['name']);
       if ($result['status'] === 2) {
           // \Log::info('占卜错误:' . $validate->getError());
            return show(config('code.error'), $result['msg']);
        }
        $validate = new \App\Tools\Validates\Recode();
        // 对传参进行参数校验
        if (!$validate->scene('add')->check($data)) {
            return show(config('code.error'), (string) $validate->getError());
        }

        $time = time();
        try
        {
            /**
             * 获取当前档案信息的日月升等信息
             */
            $astroData = Astrolog::getInstance()->setAdvance([
                'year'      => $data['year'],
                'month'     => $data['month'],
                'day'       => $data['day'],
                'hour'      => $data['hour'],
                'minute'    => $data['minute'],
                'timezone'  => $data['timezone'],
                'long_deg'  => $data['long_deg'],
                'long_min'  => $data['long_min'],
                'ew'        => $data['ew'],
                'lat_deg'   => $data['lat_deg'],
                'lat_min'   => $data['lat_min'],
                'ns'        => $data['ns'],
                'is_summer' => $data['is_summer'],
            ])->setExecPrefix(config('astrolog.prefix'))->getTheRecodeAstro();
        } catch (\Exception $e) {
            \Log::info('getTheRecodeAstro:' . $e->getMessage());
            return show(config('code.error'), '计算星盘信息失败');
        }

        $recodeModel = new Recode();
        try
        {
            $isAdd = true;
            // 添加自己的档案时，可能为更新
            if ($data['comments'] == '自己' || $data['isself'] == 1) {
                $recodeOld = $recodeModel->where(['isself' => 1, 'uid' => $data['uid']])->first();
                // 若已有自己的档案
                if ($recodeOld && !empty($recodeOld)) {
                    $id    = $recodeOld['id'];
                    $isAdd = false;
                }
                // 增加性别更新同步 用户表
                 if ($data['type']=='1' || $data['type']=='2' ) {
                     // 更新用户表信息
                    (new User())->where('id', $data['uid'])->update([
                        'gender'        => $data['type'],
                    ]);
                }
                    // 更新用户表信息
                    (new User())->where('id', $data['uid'])->update([
                        // 'nickname'        => $data['name'],
                        'user_name'        => $data['name'],
                        'user_avatar'          => $data['avatar'],
                        'has_self_recode' => 1,
                    ]);
            }
            // 新增档案
            if ($isAdd === true) {
                $id                       = $recodeModel->insertGetId($data); // 返回自增id
                $astroData['rid']         = $id;
                $astroData['create_time'] = $time;
                // 新增当前档案访问数据
               DB::table('app_recode_info')->insert([
                    'rid'         => $id,
                    'create_time' => $time,
                    'last_time'   => $time,
                ]);
                // 新增当前档案行星数据
                $aid = DB::table('app_recode_astro')->insertGetId($astroData);
                // 更新aid字段
                $recodeModel->where(['id' => $id])->update(['aid' => $aid]);
                // 写入缓存时，去除该字段
                unset($astroData['rid']);
                unset($astroData['create_time']);
            } else {
                /** @var array $recodeOld 原档案数据 */
                $recodeModel->where('id', $id)->update($data);
                DB::table('app_recode_astro')->where(['id' => $recodeOld['aid']])->update($astroData);
            }

            $data['id'] = (int) $id;
             // 更新用户信息缓存
            CacheManage::getInstance()->setCacheConfig('users', $data['uid'])->setCache([
                    'recode'   => $data['id'], // 自己档案的id
                    'nickname' => $data['name'], // 用户昵称
                    'avatar'   => $data['avatar'], // 用户头像
                ]);
            $data = array_merge($data, $astroData);
            // 更新档案缓存
            CacheManage::getInstance()->setCacheConfig('recodes', $data['id'])->setCache($data, 'details', false);
        } catch (\Exception $e) {
            \Log::info('addRecord:' . $e->getMessage());
            return show(config('code.error'), '添加档案失败');
        }
        return show(config('code.success'), '档案添加成功', $data);
    }

    /**
     * 编辑档案
     */
    public function edit(Request $request)
    {
        $data = [
            'id'             => $request->input('id', 0), // 档案id
            'uid'            => (int) $request->uid, // 用户id
            'name'           => $request->input('name', '', 'htmlspecialchars'), // 档案名称
            'type'           => $request->input('type', 2), // 档案类型  1男 | 2 女 | 3 男同 | 4 女同 | 5 事件 | 6 卜卦
            'year'           => $request->input('year'), // 出生时间-年
            'month'          => $request->input('month'), // 出生时间-月
            'day'            => $request->input('day'), // 出生时间-日
            'hour'           => $request->input('hour'), // 出生时间-时
            'minute'         => $request->input('minute'), // 出生时间-分
            'timezone'       => $request->input('timezone', 8), // 出生时间-时区
            'birth_country'  => $request->input('birth_country', '', 'htmlspecialchars'), // 出生地点-省
            'birth_province' => $request->input('birth_province', '', 'htmlspecialchars'), // 出生地点-市
            'birth_city'     => $request->input('birth_city', '', 'htmlspecialchars'), // 出生地点-区
            'live_country'   => $request->input('live_country', '', 'htmlspecialchars'), // 现居地-省
            'live_province'  => $request->input('live_province', '', 'htmlspecialchars'), // 现居地-省
            'live_city'      => $request->input('live_city', '', 'htmlspecialchars'), // 现居地-省
            'comments'       => $request->input('comments', '', 'htmlspecialchars'), // 档案标签如 自己 朋友 案例
            'isself'         => $request->input('isself'), // 档案是否为自己 0 否 | 1 是（自己的档案无法删除，无法更改为其他标签）
            'long_deg'       => $request->input('long_deg'), // 经度-度
            'long_min'       => $request->input('long_min'), // 经度-分
            'ew'             => $request->input('ew', 1), // 东经|西经 1|-1
            'lat_deg'        => $request->input('lat_deg'), // 纬度-度
            'lat_min'        => $request->input('lat_min'), // 纬度-度
            'ns'             => $request->input('ns', 1), // 南纬北纬  1|-1
            'avatar'         => $request->input('avatar', '', 'htmlspecialchars'), // 头像地址
        ];
        $data['is_summer'] = 0;
        // 只判断大陆地区的夏令时
        if (!in_array($data['birth_country'], $this->noNeedJudgeSummer)) {
            $data['is_summer'] = isSummerTime($data['hour'], $data['minute'], 0, $data['month'], $data['day'], $data['year']) ? 1 : 0;
        }
        $result =contentCensor($data['name']);
       if ($result['status'] === 2) {
           // \Log::info('占卜错误:' . $validate->getError());
            return show(config('code.error'), $result['msg']);
        }

        $validate = new \App\Tools\Validates\Recode();
        // 参数校验
        if (!$validate->scene('edit')->check($data)) {
            return show(config('code.error'), (string) $validate->getError());
        }

        $recodeModel = new Recode();
        // 查询未更改前的档案
        $recodeOld = $recodeModel->getRecode(['id' => $data['id'], 'uid' => $data['uid']]);

        if ($recodeOld['isself'] != 1 && $data['isself'] == 1) {
            return show(config('code.error'), '不能有多个为自己的档案');
        }
        $updateData = [];
        // 获取当前的所有改动
        foreach ($data as $key => $d) {
            if (isset($recodeOld[$key]) && $recodeOld[$key] != $d) {
                $updateData[$key] = $d;
            }
        }
        if (empty($updateData)) {
            return show(config('code.error'), '未进行任何改变');
        }
        /**
         * 本次修改是否有时间变更
         */
        if (isset($updateData['year']) || isset($updateData['month']) || isset($updateData['day'])
            || isset($updateData['hour']) || isset($updateData['minute']) || isset($updateData['timezone'])
            || isset($updateData['is_summer'])) {
            $timeChange = true;
        } else {
            $timeChange = false;
        }
        // 时间有变动
        if ($timeChange === true) {
            // VIP1 档案时间可以任意修改
            if (getVip($request->uid) === 1) {
                $notAllow = false;
            } // 检测是否存在档案相关已付款订单
            else {
                $notAllow = $recodeModel->checkAboutOrders(['uid' => $data['uid'], 'id' => $data['id']]);
            }

            // 若有，则档案时间只能为当天内变动，若跨日期，则只能在两小时以内变动
            if ($notAllow === true) {
                // 判断or_day是否存在
                if (empty($recodeOld['or_day']) || !$recodeOld['or_day']) {
                    $recodeOld['or_day'] = $recodeOld['day'];
                    $data['or_day']      = $recodeOld['day'];
                }

                $limit_time = strtotime($recodeOld['year'] . '-' . $recodeOld['month'] . '-' . $recodeOld['or_day'] . ' 12:00');
                /**
                 * 允许修改的时间戳范围
                 * 3600 * 14 = 50400
                 * $max 最大值
                 * $min 最小值
                 */
                $max = $limit_time + 50400;
                $min = $limit_time - 50400;
                /**
                 * 修改后的时间戳
                 */
                $new_time = strtotime($data['year'] . '-' . $data['month'] . '-' . $data['day'] . ' ' . $data['hour'] . ':' . $data['minute']);

                // if ($new_time > $max || $new_time < $min) {
                //     return show(config('code.error'), '由于该档案购买过付费项目，修改功能受限，改后时间不能与原档案时间差超过两个小时');
                // }
            }
        }
        /**
         * 本次修改是否有出生地变更
         */
        if (isset($updateData['long_deg']) || isset($updateData['long_min']) || isset($updateData['ew'])
            || isset($updateData['lat_deg']) || isset($updateData['lat_min']) || isset($updateData['ns'])) {
            $longLatChange = true;
        } else {
            $longLatChange = false;
        }
        /**
         * 当有出生时间或出生地点变更时，需要重新计算该档案的日月升等行星信息
         */
        if ($timeChange === true || $longLatChange === true) {
            $astroData = Astrolog::getInstance()->setAdvance([
                'year'      => $data['year'],
                'month'     => $data['month'],
                'day'       => $data['day'],
                'hour'      => $data['hour'],
                'minute'    => $data['minute'],
                'timezone'  => $data['timezone'],
                'long_deg'  => $data['long_deg'],
                'long_min'  => $data['long_min'],
                'ew'        => $data['ew'],
                'lat_deg'   => $data['lat_deg'],
                'lat_min'   => $data['lat_min'],
                'ns'        => $data['ns'],
                'is_summer' => $data['is_summer'],
            ])->setExecPrefix(config('astrolog.prefix'))->getTheRecodeAstro();
        }
        $time = time();
        try
        {
            // 更新档案数据
            $recodeModel->where(['id' => $data['id'], 'uid' => $data['uid']])->update($updateData);
            // 如果更新的是自己的档案 且 用户修改了档案名称或头像 则更新用户数据 昵称 头像
            if ($recodeOld['isself'] == 1) {
                $userUpdateData = [];
                // if (isset($updateData['name'])) {
                //     $userUpdateData['nickname'] = $updateData['name'];
                // }
                if (isset($updateData['name'])) {
                    $userUpdateData['user_name'] = $updateData['name'];
                }
                if (isset($updateData['avatar'])) {
                    $userUpdateData['user_avatar'] = $updateData['avatar'];
                }

                // 增加性别更新同步 用户表
                 if (!empty($userUpdateData['type'])){
                 if ($updateData['type']=='1' || $updateData['type']=='2' ) {
                    $userUpdateData['gender'] = $updateData['type'] ?? $recodeOld['type'];
                  }
                }
                if (!empty($userUpdateData)) {
                    (new User())->updateUserinfo(['id' => $data['uid']], $userUpdateData);
                    // 更新用户信息缓存
                   CacheManage::getInstance()->setCacheConfig('users', $data['uid'])->setCache($userUpdateData, 'details', true);
                }
            }
            $data = array_merge($recodeOld, $data);
            // 更新档案行星数据
            if ($timeChange === true || $longLatChange === true) {
                // 记录用户更新档案的时间
                DB::table('app_recode_info')->where('rid', $data['id'])->update(['last_time' => $time]);
                // 更新用户档案档案信息 行星落座信息
                DB::table('app_recode_astro')->where(['id' => $recodeOld['aid']])->update($astroData);
                // 合并各数据，准备要返回的数据
                $data = array_merge($data, $astroData);
            }
            // 更新档案缓存
            CacheManage::getInstance()->setCacheConfig('recodes', $data['id'])->setCache($data, 'details', true);
            // TODO 删除首页用户星座缓存
            Cache::forget('d_f_h_sun_in_sign_' . $data['id']);
            // $dailyFortune = new InfoController();
            // $dailyFortune->fortune_redis_job(['rid' => $recodeOld['id'], 'uid' => $recodeOld['uid']]);
/*
// 查询该档案已解锁的占星地图项目
$map_lines = (new Map())->getRecodeUnlockLines(['uid' => $data['uid'], 'rid' => $data['id'], 'isself' => $data['isself']]);
// 若已解锁命运之城，删除命运之城数据库里存储的数据  和 缓存的命运之城数据
if ($map_lines[11] == 1)
{
(new FateCity())->removeFateCity(['uid' => $data['uid'], 'rid' => $data['id']]);
}*/
        } catch (\Exception $e) {
            \Log::info('editRecord：' . $e->getMessage());
            return show(config('code.error'), '更新失败');
        }
        return show(200, '更新成功', $data);
    }

    /**
     * 删除档案
     */
    public function del(Request $request)
    {
        $id = $request->input('id', 0);

        $uid = (int) $request->uid;

        $map = ['id' => $id, 'uid' => $uid];

        $validate = new \App\Tools\Validates\Recode();

        if (!$validate->scene('del')->check($map)) {
            return show(config('code.error'), (string) $validate->getError());
        }
        $recodeModel = new Recode();
        // 查询档案
        $data = $recodeModel->getRecode($map);

        if (empty($data)) {
            return show(config('code.success'), '删除成功');
        }
        if ($data['isself'] == 1) {
            return show(config('code.error'), '自己的档案不能删除');
        }
        // 查询该档案下的笔记 无法删除
        $n_data = DB::table('app_recode_note')->where(['rid' => $id, 'uid' => $uid])->first();

        if (!empty($n_data)) {
            return show(config('code.error'), '存在档案笔记，无法删除');
        }

        // 检测是否存在档案相关已付款订单
        if ($recodeModel->checkAboutOrders(['uid' => $data['uid'], 'id' => $data['id']])) {
            return show(config('code.error'), '存在已付款订单，无法删除');
        }

        // TODO 删除头像文件，需调用 阿里云oss 删除文件
        try
        {
            // 删除档案在档案袋中的信息
            (new RecodeCat())->where('rid', $id)->delete();
            // 软删除档案
            $recodeModel->where($map)->update(['status' => 0]);
            //$recodeModel->where($map)->delete();
            //DB::table('app_recode_astro')->where(['rid' => $data['id']])->delete();
            // 删除档案缓存
            CacheManage::getInstance()->setCacheConfig('recodes', $id)->rmCache();
        } catch (\Exception $e) {
            \Log::info('u' . $uid . ':delRecord:' . $e->getMessage());
            return show(config('code.error'), '删除失败');
        }
        return show(config('code.success'), '删除成功');
    }

    /**
     * 移入档案袋
     */
    public function cat(Request $request)
    {
        $id  = $request->input('id', 0);
        $cid = htmlspecialchars($request->input('cid', '')); // 1      1-3-9    1-2     5-11-59-66

        if (!$id) {
            return show(config('code.error'), '档案不存在');
        }

        $uid = (int) $request->uid;

        $time = $this->request->time();

        $RecodeModel = new Recode();
        $CatModel    = new CatModel();

        if (strlen($cid) == 1) {
            // 查询档案袋
            $cat = $CatModel->where(['uid' => $uid, 'id' => $cid, 'status' => 0])->find();

            if (empty($cat)) {
                return show(config('code.error'), '档案袋不存在');
            }
            $temp[] = [
                'rid'         => $id,
                'cid'         => intval($cid),
                'create_time' => $time,
            ];
        } elseif (strlen($cid) > 1) {
            // 当前档案同时移入多个档案袋
            $cat_arr = explode('-', $cid);

            foreach ($cat_arr as $ca) {
                $temp[] = [
                    'rid'         => $id,
                    'cid'         => (int) $ca,
                    'create_time' => $time,
                ];
            }
        }
        // 查询档案
        $rec = $RecodeModel->getRecode(['id' => $id, 'uid' => $uid]);

        if (empty($rec)) {
            return show(config('code.error'), '档案不存在');
        }
        try
        {
            $RecodeCatModel = new RecodeCat();
            $RecodeCatModel->where('rid', $id)->delete(); // 先删除

            if (!empty($temp)) {
                $RecodeCatModel->create($temp); // 后增加
            }
        } catch (\Exception $e) {
            \Log::info('u' . $uid . ':MoveRecordToCat:' . $e->getMessage());
            return show(config('code.error'), 'Move Failed.');
        }
        return show(config('code.success'), 'Move Success.');
    }

    /**
     * 多档案批量移入单个档案袋
     */
    public function move_in_cat(Request $request)
    {
        $id  = htmlspecialchars($request->input('id')); // 1      1-3-9    1-2     5-11-59-66
        $cid = $request->input('cid', 0);

        $uid = (int) $request->uid;

        $time = $this->request->time();

        $RecodeModel = new Recode();

        if (strlen($id) == 1) {
            $recode = $RecodeModel->getRecode(['uid' => $uid, 'id' => (int) $id, 'status' => 0]);

            if (empty($recode)) {
                return show(config('code.error'), '档案不存在');
            }
            $temp[] = [
                'rid'         => (int) $id,
                'cid'         => (int) $cid,
                'create_time' => $time,
            ];
        } elseif (strlen($id) > 1) {
            // 当前档案同时移入多个档案袋
            $id_arr = explode('-', $id);

            foreach ($id_arr as $i) {
                $i = (int) $i;
                if (!$i) {
                    continue;
                }

                $temp[] = [
                    'rid'         => $i,
                    'cid'         => (int) $cid,
                    'create_time' => $time,
                ];
            }
        }

        try
        {
            $RecodeCatModel = new RecodeCat();
            $RecodeCatModel->where('rid', $id)->delete(); // 先删除

            if (!empty($temp)) {
                $RecodeCatModel->create($temp); // 后增加
            }
        } catch (\Exception $e) {
            \Log::info('u' . $uid . ':MoveRecordToCat:' . $e->getMessage());
            return show(config('code.error'), 'Move Failed.');
        }
        return show(config('code.success'), 'Move Success.');
    }

    /**
     * 移出档案袋
     */
    public function moveout_cat(Request $request)
    {
        $id  = $request->input('id');
        $cid = $request->input('cid'); //1
        if (!$id) {
            return show(config('code.error'), '档案不存在');
        }
        if (!trim($cid)) {
            return show(config('code.error'), '档案袋不存在');
        }
        try
        {
            (new RecodeCat())->where(['rid' => $id, 'cid' => $cid])->delete();
        } catch (\Exception $e) {
            \Log::info('u' . $this->user['uid'] . ':MoveRecordOutCat:' . $e->getMessage());
            return show(config('code.error'), 'Move Failed.');
        }
        return show(config('code.success'), 'Move Success.');
    }

    /**
     * 上传头像
     */
    public function avatar($dir = 'uploads')
    {
        return (new Avatar())->upload($dir);
    }

    /**
     * 查询用户档案列表
     * @return [type] [description]
     */
    public function lists(Request $request, $id = null)
    {
        if ($id === null) {
            $id = $request->input('id');
        }
        $uid =  $request->uid;
        if ($id) {
            $data = Recode::from('recode as r')
                ->join('recode_astro as ra', 'r.id', '=', 'ra.rid', 'INNER')
                ->where(['r.id' => $id, 'uid' => $uid])
                ->first(['r.id', 'r.name', 'r.type', 'r.year', 'r.month', 'r.day', 'r.hour', 'r.minute', 'r.timezone', 'birth_country', 'birth_province', 'birth_city', 'live_country', 'live_province', 'live_city', 'comments', 'isself', 'long_deg', 'long_min', 'ew', 'lat_deg', 'lat_min', 'ns', 'avatar', 'is_summer', 'uid', 'aid', 'sun', 'moon', 'merc', 'venu', 'mars', 'jupi', 'satu', 'non', 'lili', 'juno', 'asc', 'mc']);
            if (empty($data)) {
                return response()->json(['code' => 10322, 'msg' => '档案不存在']);
            }
        } else {
            /*$data =  Recode::from('recode as r')
            ->join('recode_astro as ra','r.id','=','ra.rid','INNER')
            ->where(['uid'=>$uid])
            ->select(['r.id','r.name','r.type','r.year','r.month','r.day','r.hour','r.minute','r.timezone','birth_country','birth_province','birth_city','live_country','live_province','live_city','comments','isself','long_deg','long_min','ew','lat_deg','lat_min','ns','avatar','is_summer','uid','aid','sun','moon','merc','venu','mars','jupi','satu','non','lili','juno','asc','mc'])->get();*/

            $data = Recode::from('recode as r')
                ->join('recode_astro as ra', 'r.id','=','ra.rid', 'INNER')
                ->select(['r.id','r.name','r.type','r.year','r.month','r.day','r.hour','r.minute','r.timezone','birth_country','birth_province','birth_city','live_country','live_province','live_city','comments','isself','long_deg','long_min','ew','lat_deg','lat_min','ns','avatar','is_summer','uid','aid','sun','moon','merc','venu','mars','jupi','satu','non','lili','juno','asc','mc'])
                ->where(['uid' => $uid, 'status' => 1])
                ->get();
           // $data =(new Recode())->getRecodeLists(['uid' => $uid]);

        }
        return response()->json(['code' => 200, 'data' => $data, 'msg' => 'ok']);
    }

    /**
     * 查询用户档案列表
     * @return [type] [description]
     */
    public function lists_safe(Request $request, $id = null)
    {
        if ($id === null) {
            $id = $request->input('id');
        }

        $uid = $request->uid;
        if ($id) {
            $data = Recode::from('recode as r')
                ->join('recode_astro as ra', 'r.id', '=', 'ra.rid', 'INNER')
                ->where(['r.id' => $id, 'uid' => $uid])
                ->first(['r.id', 'r.name', 'r.type', 'r.year', 'r.month', 'r.day', 'r.hour', 'r.minute', 'r.timezone', 'birth_country', 'birth_province', 'birth_city', 'live_country', 'live_province', 'live_city', 'comments', 'isself', 'long_deg', 'long_min', 'ew', 'lat_deg', 'lat_min', 'ns', 'avatar', 'is_summer', 'uid', 'aid', 'sun', 'moon', 'merc', 'venu', 'mars', 'jupi', 'satu', 'non', 'lili', 'juno', 'asc', 'mc']);
            if (empty($data)) {
                return response()->json(['code' => 10322, 'msg' => '档案不存在']);
            }
        } else {
            $data = Recode::from('recode as r')
                ->join('recode_astro  as ra', 'r.id', '=', 'ra.rid', 'INNER')
                ->where(['uid' => $uid, 'status' => 1])
                ->select(['r.id', 'r.name', 'r.type', 'r.year', 'r.month', 'r.day', 'r.hour', 'r.minute', 'r.timezone', 'birth_country', 'birth_province', 'birth_city', 'live_country', 'live_province', 'live_city', 'comments', 'isself', 'long_deg', 'long_min', 'ew', 'lat_deg', 'lat_min', 'ns', 'avatar', 'is_summer', 'uid', 'aid', 'sun', 'moon', 'merc', 'venu', 'mars', 'jupi', 'satu', 'non', 'lili', 'juno', 'asc', 'mc']);
        }
        return response()->json(['code' => 200, 'data' => $data, 'msg' => 'ok']);
    }

    /**
     * 查询用户档案列表
     * TODO 加缓存
     */
    public function lists_with_cat()
    {
        $uid = $request->uid;

        $data = Cat::from('cat as c')
            ->join('recode_cat as rc', 'c.id', '=', 'rc.cid', 'INNER')
            ->where(['uid' => $uid,'status' => 1])
            ->get(['rc.cid', 'rc.rid']);

        return response()->json(['code' => 200, 'data' => $data, 'msg' => 'ok']);
    }
}
